home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 19 / Amiga Plus Leser CD 19.iso / Tools / MorphOS / cvs-1.11.2 / source / amiga / netinclude / netinet / ip_mroute.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-11-18  |  4.7 KB  |  142 lines

  1. /*
  2.  * Copyright (c) 1989 Stephen Deering.
  3.  * Copyright (c) 1992, 1993
  4.  *    The Regents of the University of California.  All rights reserved.
  5.  *
  6.  * This code is derived from software contributed to Berkeley by
  7.  * Stephen Deering of Stanford University.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in the
  16.  *    documentation and/or other materials provided with the distribution.
  17.  * 3. All advertising materials mentioning features or use of this software
  18.  *    must display the following acknowledgement:
  19.  *    This product includes software developed by the University of
  20.  *    California, Berkeley and its contributors.
  21.  * 4. Neither the name of the University nor the names of its contributors
  22.  *    may be used to endorse or promote products derived from this software
  23.  *    without specific prior written permission.
  24.  *
  25.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  26.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  28.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  29.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  30.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  31.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  32.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  33.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  34.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  35.  * SUCH DAMAGE.
  36.  *
  37.  *    @(#)ip_mroute.h    8.2 (Berkeley) 4/28/95
  38.  */
  39.  
  40. #ifndef _NETINET_IP_MROUTE_H
  41. #define _NETINET_IP_MROUTE_H
  42.  
  43. #ifndef EXEC_TYPES_H
  44. #include <exec/types.h>
  45. #endif /* EXEC_TYPES_H */
  46.  
  47. #ifndef _NETINET_IN_H
  48. #include <netinet/in.h>
  49. #endif /* _NETINET_IN_H */
  50.  
  51. /*
  52.  * Definitions for the kernel part of DVMRP,
  53.  * a Distance-Vector Multicast Routing Protocol.
  54.  * (See RFC-1075.)
  55.  *
  56.  * Written by David Waitzman, BBN Labs, August 1988.
  57.  * Modified by Steve Deering, Stanford, February 1989.
  58.  *
  59.  * MROUTING 1.0
  60.  */
  61.  
  62.  
  63. /*
  64.  * DVMRP-specific setsockopt commands.
  65.  */
  66. #define    DVMRP_INIT    100
  67. #define    DVMRP_DONE    101
  68. #define    DVMRP_ADD_VIF    102
  69. #define    DVMRP_DEL_VIF    103
  70. #define    DVMRP_ADD_LGRP    104
  71. #define    DVMRP_DEL_LGRP    105
  72. #define    DVMRP_ADD_MRT    106
  73. #define    DVMRP_DEL_MRT    107
  74.  
  75.  
  76. /*
  77.  * Types and macros for handling bitmaps with one bit per virtual interface.
  78.  */
  79. #define    MAXVIFS 32
  80. typedef ULONG vifbitmap_t;
  81. typedef UWORD vifi_t;        /* type of a vif index */
  82.  
  83. #define    VIFM_SET(n, m)        ((m) |= (1 << (n)))
  84. #define    VIFM_CLR(n, m)        ((m) &= ~(1 << (n)))
  85. #define    VIFM_ISSET(n, m)    ((m) & (1 << (n)))
  86. #define    VIFM_CLRALL(m)        ((m) = 0x00000000)
  87. #define    VIFM_COPY(mfrom, mto)    ((mto) = (mfrom))
  88. #define    VIFM_SAME(m1, m2)    ((m1) == (m2))
  89.  
  90.  
  91. /*
  92.  * Agument structure for DVMRP_ADD_VIF.
  93.  * (DVMRP_DEL_VIF takes a single vifi_t argument.)
  94.  */
  95. struct vifctl {
  96.     vifi_t        vifc_vifi;            /* the index of the vif to be added */
  97.     UBYTE        vifc_flags;         /* VIFF_ flags defined below */
  98.     UBYTE        vifc_threshold;     /* min ttl required to forward on vif */
  99.     struct    in_addr vifc_lcl_addr;    /* local interface address */
  100.     struct    in_addr vifc_rmt_addr;    /* remote address (tunnels only) */
  101. };
  102.  
  103. #define    VIFF_TUNNEL    0x1        /* vif represents a tunnel end-point */
  104.  
  105.  
  106. /*
  107.  * Argument structure for DVMRP_ADD_LGRP and DVMRP_DEL_LGRP.
  108.  */
  109. struct lgrplctl {
  110.     vifi_t    lgc_vifi;
  111.     struct    in_addr lgc_gaddr;
  112. };
  113.  
  114.  
  115. /*
  116.  * Argument structure for DVMRP_ADD_MRT.
  117.  * (DVMRP_DEL_MRT takes a single struct in_addr argument, containing origin.)
  118.  */
  119. struct mrtctl {
  120.     struct    in_addr mrtc_origin;    /* subnet origin of multicasts */
  121.     struct    in_addr mrtc_originmask; /* subnet mask for origin */
  122.     vifi_t    mrtc_parent;        /* incoming vif */
  123.     vifbitmap_t mrtc_children;    /* outgoing children vifs */
  124.     vifbitmap_t mrtc_leaves;    /* subset of outgoing children vifs */
  125. };
  126.  
  127. /*
  128.  * The kernel's multicast routing statistics.
  129.  */
  130. struct mrtstat {
  131.     ULONG    mrts_mrt_lookups;    /* # multicast route lookups */
  132.     ULONG    mrts_mrt_misses;    /* # multicast route cache misses */
  133.     ULONG    mrts_grp_lookups;    /* # group address lookups */
  134.     ULONG    mrts_grp_misses;    /* # group address cache misses */
  135.     ULONG    mrts_no_route;        /* no route for packet's origin */
  136.     ULONG    mrts_bad_tunnel;    /* malformed tunnel options */
  137.     ULONG    mrts_cant_tunnel;    /* no room for tunnel options */
  138.     ULONG    mrts_wrong_if;        /* arrived on the wrong interface */
  139. };
  140.  
  141. #endif /* _NETINET_IP_MROUTE_H */
  142.